package pe.edu.upc.dew.grupo02.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;

import pe.edu.upc.dew.grupo02.model.Pelicula;
import pe.edu.upc.dew.grupo02.model.Sala;
import pe.edu.upc.dew.grupo02.model.Ticket;
import pe.edu.upc.dew.grupo02.model.TicketDetalle;
import pe.edu.upc.dew.grupo02.model.TipoEntrada;
import pe.edu.upc.dew.grupo02.model.Usuario;

public class TicketDetalleDao extends SimpleJdbcDaoSupport implements ITicketDetalle {

private RowMapper<TicketDetalle> mapper;
	
	public TicketDetalleDao(){
		
		mapper = new RowMapper<TicketDetalle>() {
	        public TicketDetalle mapRow(ResultSet rs, int rowNum) throws SQLException {
	        	
	            Ticket ticket = new Ticket();
	            ticket.setCoTicket(rs.getInt("coTicket"));
	            ticket.setFecha(rs.getDate("fecha"));
	            ticket.setHora(rs.getString("hora"));
	            
	            Usuario usuario=new Usuario();
	            usuario.setCoUsuario(rs.getInt("coUsuario"));
	            usuario.setNombre(rs.getString("nombreUsuario"));
	            usuario.setApellidos(rs.getString("apellidos"));
	            usuario.setCorreo(rs.getString("correo"));
	            usuario.setClave(rs.getString("clave"));
	            
	            Pelicula pelicula=new Pelicula();
	            pelicula.setCoPelicula(rs.getInt("coPelicula"));
	            pelicula.setNombre(rs.getString("nombrePelicula"));
	            pelicula.setDirector(rs.getString("director"));
	            pelicula.setActores(rs.getString("actores"));
	            pelicula.setPais(rs.getString("pais"));
	            pelicula.setSinopsis(rs.getString("sinopsis"));
	            pelicula.setFl3d(rs.getBoolean("fl3dPelicula"));
	            pelicula.setEstado(rs.getInt("estado"));
	            
	            Sala sala=new Sala();
	            sala.setCoSala(rs.getInt("coSala"));
	            sala.setNombre(rs.getString("nombreSala"));
	            sala.setCapacidad(rs.getInt("capacidad"));
	            sala.setFl3d(rs.getBoolean("fl3dSala"));
	            
	            TipoEntrada tipoEntrada=new TipoEntrada();
	            tipoEntrada.setCoTipoEntrada(rs.getInt("coTipoEntrada"));
	            tipoEntrada.setNombre(rs.getString("nombreTipoEntrada"));
	            
	            ticket.setPelicula(pelicula);
	            ticket.setSala(sala);
	            ticket.setUsuario(usuario);
	            
	            TicketDetalle ticketDetalle=new TicketDetalle();
	            
	            ticketDetalle.setTicket(ticket);
	            ticketDetalle.setTipoEntrada(tipoEntrada);
	            ticketDetalle.setCantidad(rs.getInt("cantidad"));
	            ticketDetalle.setPrecio(rs.getDouble("precio"));
	            
	            return ticketDetalle;
	        }
	    };
	}
	
	
	@Override
	public void crear(TicketDetalle ticketDetalle) {
		getSimpleJdbcTemplate().update("insert into ticketdetalle(coticket,cotipoentrada,cantidad,precio) values(?,?,?,?)", 
		ticketDetalle.getTicket().getCoTicket(),ticketDetalle.getTipoEntrada().getCoTipoEntrada(),ticketDetalle.getCantidad(),ticketDetalle.getPrecio());
				
	}

	@Override
	public void eliminar(int coTicket, int coTipoEntrada) {
		getSimpleJdbcTemplate().update("delete from ticketdetalle where coticket=? and cotipoentrada=?", coTicket,coTipoEntrada);
		
	}

	@Override
	public void actualizar(TicketDetalle ticketDetalle) {
		getSimpleJdbcTemplate().update("update ticketDetalle set cantidad=?,precio=? where coticket=? and cotipoentrada=?",ticketDetalle.getCantidad(),ticketDetalle.getPrecio(), ticketDetalle.getTicket().getCoTicket(),ticketDetalle.getTipoEntrada().getCoTipoEntrada());
		
	}

	@Override
	public List<TicketDetalle> getTicketDetalles(int coTicket) {
		return getSimpleJdbcTemplate().query("select coTicket,fecha,hora,copelicula,cosala,cousuario," +
				"Pelicula.nombre nombrePelicula,director,actores,pais,Pelicula.fl3d fl3dPelicula,estado,sinopsis," +
				"Sala.nombre nombreSala,capacidad,Sala.fl3d fl3dSala,Usuario.nombre nombreUsuario," +
				"apellidos,clave,correo,cantidad,precio,cotipoEntrada,TipoEntrada.nombre nombreTipoEntrada from Ticket join Pelicula on Ticket.copelicula=Pelicula.coPelicula join " +
				"Sala on Ticket.coSala=Sala.coSala join Usuario on Ticket.coUsuario=Usuario.coUsuario join " +
				"TicketDetalle on Ticket.coTicket=TicketDetalle.coTicket join TipoEntrada on TicketDetalle.coTipoEntrada=TipoEntrada.coTipoEntrada "+
				"where Ticket.coTicket=?", mapper, coTicket);
	}

	@Override
	public TicketDetalle getTicketDetalle(int coTicket, int coTipoEntrada) {

		return getSimpleJdbcTemplate().queryForObject("select coTicket,fecha,hora,copelicula,cosala,cousuario," +
				"Pelicula.nombre nombrePelicula,director,actores,pais,Pelicula.fl3d fl3dPelicula,estado,sinopsis," +
				"Sala.nombre nombreSala,capacidad,Sala.fl3d fl3dSala,Usuario.nombre nombreUsuario," +
				"apellidos,clave,correo,cantidad,precio,cotipoEntrada,TipoEntrada.nombre nombreTipoEntrada from Ticket join Pelicula on Ticket.copelicula=Pelicula.coPelicula join " +
				"Sala on Ticket.coSala=Sala.coSala join Usuario on Ticket.coUsuario=Usuario.coUsuario join " +
				"TicketDetalle on Ticket.coTicket=TicketDetalle.coTicket join TipoEntrada on TicketDetalle.coTipoEntrada=TipoEntrada.coTipoEntrada "+
				"where Ticket.coTicket=? and TicketDetalle.coTipoEntrada=?", mapper, coTicket,coTipoEntrada);
	}

}
